home *** CD-ROM | disk | FTP | other *** search
- /* $Header: play.c,v 7.0.1.1 86/10/16 10:52:39 lwall Exp $ */
-
- /* $Log: play.c,v $
- * Revision 7.0.1.1 86/10/16 10:52:39 lwall
- * Added Damage. Fixed random bugs.
- *
- * Revision 7.0 86/10/08 15:13:09 lwall
- * Split into separate files. Added amoebas and pirates.
- *
- */
-
- #include "EXTERN.h"
- #include "warp.h"
- #include "bang.h"
- #include "score.h"
- #include "object.h"
- #include "move.h"
- #include "term.h"
- #include "them.h"
- #include "us.h"
- #include "util.h"
- #include "weapon.h"
- #include "INTERN.h"
- #include "play.h"
-
- void
- play_init()
- {
- ;
- }
-
- void
- play()
- {
- bool done = FALSE;
- Reg1 OBJECT *curobj;
- Reg2 OBJECT *to;
- Reg3 int i;
- Reg4 int x;
- Reg5 int y;
-
- display_status();
- #ifdef TIOCOUTQ
- while (output_pending() > charsperhalfsec)
- sleep(1); /* allow buffers to empty */
- #endif
- sleep(3);
- do {
- timer++;
- nxtbang = 0;
- banging = FALSE;
- display_status();
- #ifdef TIOCOUTQ
- while (output_pending() > charsperhalfsec)
- sleep(1);
- #endif
- if (lowspeed)
- roundsleep(2);
- else
- roundsleep(1);
- if (ent) {
- evely = ent->vely;
- evelx = ent->velx;
- if (cloaking && ent->energy >= 250 && !damflag[NOCLOAKING]) {
- if (!rand_mod(300)) {
- damage++;
- damflag[NOCLOAKING] = rand_mod(smarts+1)+2;
- }
- ent->energy -= ent->energy/40;
- }
- else
- cloaking = FALSE;
- cloaked = cloaking;
- }
- if (base) {
- bvely = base->vely;
- bvelx = base->velx;
- }
- get_commands(&done);
- if (done)
- break;
- their_smarts();
- apolloflag = 0;
- if (ent) {
- if (numapollos) {
- if (numstars) {
- if (realapollo) {
- if (lookfor(realapollo->posy,realapollo->posx,
- Enterprise)) {
- apolloflag = 1;
- }
- }
- else if (lookfor(root.next->posy,root.next->posx,
- Enterprise)) {
- apolloflag = 1;
- realapollo = root.next;
- mvaddch(realapollo->posy+1,realapollo->posx*2,
- 'A');
- realapollo->image = 'A';
- realapollo->mass = 6000;
- inumapollos = 1;
- numenemies++;
- inumenemies++;
- possiblescore += 5000;
- }
- if (apolloflag) {
- if (blast[realapollo->posy][realapollo->posx] <= 32000)
- evely = evelx = 0;
- realapollo->energy = 32000;
- }
- }
- else
- numapollos = 0;
- }
- ent->vely = evely;
- ent->velx = evelx;
- }
- if (base) {
- if (numapollos) {
- if (numstars) {
- if (realapollo) {
- if (lookfor(realapollo->posy,realapollo->posx,
- Base)) {
- apolloflag |= 2;
- }
- }
- else if (lookfor(root.next->posy,root.next->posx,
- Base)) {
- apolloflag |= 2;
- realapollo = root.next;
- mvaddch(realapollo->posy+1,realapollo->posx*2,
- 'A');
- realapollo->image = 'A';
- realapollo->mass = 6000;
- inumapollos = 1;
- numenemies++;
- inumenemies++;
- possiblescore += 5000;
- }
- if (apolloflag & 2) {
- if (blast[realapollo->posy][realapollo->posx] <= 32000)
- bvely = bvelx = 0;
- realapollo->energy = 32000;
- }
- }
- else
- numapollos = 0;
- }
- base->vely = bvely;
- base->velx = bvelx;
- }
- if (aretorps) {
- aretorps = 0;
- for (i=0;i<2;i++) for (y=0;y<3;y++) for (x=0;x<3;x++) {
- if (curobj = isatorp[i][y][x]) {
- to = occupant[(curobj->posy+curobj->vely+YSIZE00)%YSIZE]
- [(curobj->posx+curobj->velx+XSIZE00)%XSIZE];
- if (to && !to->vely && !to->velx) {
- unmake_object(curobj);
- if (i)
- btorp++;
- else
- etorp++;
- }
- isatorp[i][y][x]=0;
- }
- }
- }
- move_universe();
- if (finish) {
- finish--;
- if (!finish && (!(numenemies || numos) || (!ent && !base))) {
- done = TRUE;
- timer -= 5;
- }
- }
- else if (!banging && (!(numenemies || numos) || (!ent && !base)))
- finish = 5;
- } while (!done);
- }
-